// store/index.ts
import Vuex from 'vuex';
import Vue from 'vue';
import { Factory } from '@/assets/ts/class/factory';
import { Item } from '@/assets/ts/class/item';

export interface RootState {
	factory : Factory | null; // Vuex 的根状态，包含当前工厂信息
}

// 使用 Vue.use 注册 Vuex 插件
Vue.use(Vuex);

// 创建 Vuex Store
export default new Vuex.Store<RootState>({
	state: {
		factory: null, // 初始状态，当前工厂信息为 null
	},
	mutations: {
		// 设置当前工厂信息
		setFactory(state, factory : Factory | null) {
			state.factory = factory; // 更新 Vuex 中的 factory 状态
		},
		// 更新工厂的属性（通用方法）
		updateFactoryProperty(state, { property, value } : { property : keyof Factory; value : any }) {
			if (state.factory) {
				state.factory[property] = value; // 更新工厂的指定属性
			}
		},
	},
	actions: {
		// 设置当前工厂信息
		setFactoryAsync({ commit }, factory : Factory | null) {
			commit('setFactory', factory); // 调用 mutation 更新 Vuex 中的 factory 状态
		},
		// 更新工厂的产物列表
		setFactoryProducts({ commit }, products : Item[]) {
			commit('updateFactoryProperty', { property: 'products', value: products });
		},
		// 更新工厂的原料列表
		setFactoryIngredients({ commit }, ingredients : Item[]) {
			commit('updateFactoryProperty', { property: 'ingredients', value: ingredients });
		},
		// 更新工厂的配方列表
		setFactoryRecipes({ commit }, recipes : Array<{ item : number; recipe : number }>) {
			commit('updateFactoryProperty', { property: 'recipes', value: recipes });
		}
	},
	getters: {
		// 获取当前工厂信息
		getFactory: (state : RootState) => state.factory,
	},
});